Précédance des paquets R

Nous allons, pour chaque paquet R sur GitHub et CRAN, identifier la date à laquelle ce paquet a été "ajouté". Ensuite, nous regarderons pour chaque paquet présent dans ces deux communautés, quels sont les paquets qui sont apparus avant dans telle ou telle communauté, et quel est le délai moyen pour apparaître dans l'autre.


In [108]:
import pandas

cran_first = pandas.DataFrame.from_csv('../data/cran-first.csv')
cran_snapshot = pandas.DataFrame.from_csv('../data/cran-snapshot.csv')
github = pandas.DataFrame.from_csv('../data/github_R_pushevents.csv')

L'analyse suivante est naïve dans le sens où elle repose, pour GitHub, sur la date du premier PushEvent enregistré (au mieux : 2013-01-01 !).


In [109]:
_ = github.query('owner != "cran" and owner != "rpkg"').drop_duplicates(('package',))[['package']]
_['github'] = _.index
github = _.set_index('package')

In [110]:
cran_first = cran_first.rename(columns={'mtime': 'cran'})[['cran']]

In [111]:
cran_snapshot['archived'] = 0
cran = cran_first.join(cran_snapshot, how='left')

In [112]:
cran = cran.fillna(1)[['cran', 'archived']]

In [113]:
packages = github.join(cran, how='inner')

In [114]:
packages['cran'] = pandas.to_datetime(packages['cran'])

In [115]:
def delta(x):
    if x['github'] and x['cran']:
        return x['cran'] - x['github']
    else:
        return pandas.np.NaN

packages['delta'] = packages.apply(delta, axis=1)

In [116]:
%matplotlib inline

In [117]:
packages['days'] = (packages['delta'].dropna() / pandas.np.timedelta64(1, 'D')).astype(int)

In [133]:
x = packages['days'].value_counts()
x = x.sort_index()
x.cumsum().plot(figsize=(15,6))


Out[133]:
<matplotlib.axes.AxesSubplot at 0x7f9ff122cd10>

In [137]:
x.cumsum().plot(figsize=(15,6), xlim=(-750, 700))


Out[137]:
<matplotlib.axes.AxesSubplot at 0x7f9fd8999a50>

In [163]:
packages['github_delta'] = packages['github'] - pandas.to_datetime('2015-01-01')
packages['github_delta'] = (packages['github_delta'].dropna() / pandas.np.timedelta64(1, 'D')).astype(int)

packages['cran_delta'] = packages['cran'] - pandas.to_datetime('2015-01-01')
packages['cran_delta'] = (packages['cran_delta'].dropna() / pandas.np.timedelta64(1, 'D')).astype(int)

packages.plot(kind='scatter', x='github_delta', y='cran_delta', figsize=(15,15))


Out[163]:
<matplotlib.axes.AxesSubplot at 0x7f9fd86df250>

In [164]:
packages.plot(kind='scatter', x='github_delta', y='cran_delta', figsize=(15,15), xlim=(-800,200), ylim=(-800,200))


Out[164]:
<matplotlib.axes.AxesSubplot at 0x7f9fd8755f90>